package org.example.thread.futuretask.demo1;

import java.util.List;
import java.util.Random;
import java.util.concurrent.Future;

/**
 * 邪恶线程，随机的取消某些订单。
 */
class EvilThread implements Runnable {
    private List<Future> ordersToProcess;
     //1、在构造函数中传入待处理的订单列表，这样可以对某一些Future对象发送取消请求。
    public EvilThread(List<Future> future) {
        this.ordersToProcess = future;
    }

    @Override
    public void run() {
         //2、创建100个取消请求
        Random myNextKill = new Random(System.currentTimeMillis() % 100);
        for (int i = 0; i < 100; i++) {
            //3、随机选择Future对象进行取消。
            int index = myNextKill.nextInt(StocksOrderProcessor.MAX_NUMBER_OF_ORDER);
            //4、调用Future对象的cancel方法以发送请求，并将cancel方法的参数设为ture。表示任务可能会在执行过程中被中断。
            boolean cancel = ordersToProcess.get(index).cancel(true);
            //5、判断是否取消成功，
            if (cancel) {
                System.out.println("Cancel Order Succeded:订单取消成功" + index);
            } else {
                System.out.println("cancel Order Failed:订单取消失败" + index);
            }
            try {
                //6、在每两个请求之间让“邪恶”线程睡一会。
                Thread.sleep(myNextKill.nextInt(100));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

